AngularJs 学习笔记(六)

个人笔记整理,有误欢迎指正

作者 Mr.Woo 日期 2016-12-14
AngularJs 学习笔记(六)

AngularJs 学习笔记(六)


一、AngularJs内置jQLite对象

1.angularjs里面内置了jquery的部分功能,可被我们使用。

var box = document.querySelector('.box');
//把一个DOM对象转成内置的jQLite对象
box = angular.element(box);
box.css({

    'width':'100px',
    'height':'100px'
})

2.jQLite只有jQuery中的基本功能,如果想使用jQuery的所有功能,那么只需导入jquery文件

二、指令的作用域

1.每自定义一个指令,都有自己的作用域

自定义指令,默认情况下,父子之间使用一个作用域$scope

  • 在自定义指令属性中 scope可用来修改作用域,值有两种类型:(true/false)
  • 为true时,父作用域修改时会影响子作用域;子作用域修改时,不会影响父作用域;当子的修改过完后,就互不影响
  • 为false时,跟默认情况下一样,使用的是同一作用域

注意:同名字控制器下的作用域是不一样的

2.scope不传入布尔值,而传入为对象时,它是隔离作用域(跟谁都没有关系)

  • 在对象中可以允许外界传入一些参数进来。
  • 如果有,就用自己的属性,没有的话,就是空,不去找任何人

3.在scope中传入对象时,可指定修饰符

scope:{

    msg:'@'  //@-->特点:1.传值时必须使用插值语法 <div msg='{{woo}}'></div>
                        2.属于单向传递(父会影响子 子不会影响父)



    name:'='  //= -->特点:1.传值不需要使用插值语法,直接使用属性名称 <div name='属性名称'></div>
                           2.属于双向传递(父子之间互相影响)


    show:'&'  //& -->特点:1.要求外界传入一个方法 <div show='方法名称()'></div>
}

一个指令,本身可以通过模板传给我们的值,我们展示该值。但是可以通过修饰符通过外界来传递我们想要的值,而不会写死了数据,起到灵活性。

app.directive('woo',function (){

    return{

        restrict:'A',
        link: function ($scope,ele,attr) {

            console.log(ele);  //打印出来的是整个标签

            console.log(attr);  //打印出来的是标签的属性

        }

    }

})

link里面有三个参数:

  • $scope: 当前指令的作用域
  • ele: 当前指令所在的标签(它是jQLite对象)
  • attr: 指令身上绑定的属性,可以获取到绑定的属性
app.directive('woo',function (){

return{

    restrict:'A',
    controller:function(){ 

        alert(1);
    }
    link: function ($scope,ele,attr) {

        alert(2);
    }
 }
})
  • 以上先执行controller,是在一创建指令时就执行了 不管dom有没有加载完成。一般在控制器当中只做业务逻辑处理,不牵扯任何dom

  • 后执行link,当所有的dom节点加载完成时才去调用。既可做业务逻辑,也可以处理dom,主要处理dom元素。

其实除了controller和link外,还有compile,它主要是在开始编译时来调用,里面没有$scope。当有compile时,link不会执行。